Current virtual keyboards have layouts including key sizes and spacing which are not sufficiently adaptable to individual users. To overcome this issue, some virtual keyboards allocate reference keys of the virtual keyboards, for instance by detecting “F” and “J” key-strokes of a standard “QWERTY” keyboard based on finger touches, and the virtual keyboards then layout the remaining keys based on the positions of the reference keys. However, one drawback of such an approach is that it may not accurately size a virtual keyboard when finger touches are close together. For example, since finger touches may be grouped relatively close together for both users with long fingers and hands and users with short fingers and hands, such an approach may result in a virtual keyboard that is not appropriately sized for a user's finger and hand length.